<?php
namespace Pinenut\Model2;

abstract class Adapter {
	
	protected $collection;
	
	function __construct($collection) {
		$this->collection = $collection;
	}
	
	/**
	 * Возвращаем новый уникальный идентификатор
	 */
	abstract static function generateId();
	
	/**
	 * Собираем и выполняем запрос на выборку данных
	 *
	 * @param array $where
	 * @param array $fields
	 * @return array
	 */
	abstract function select(array $where = null,
			array $fields = null, array $order = null,
			$offset = null, $limit = null);
		
		
	/**
	 * Выполняем запрос на обновление
	 *
	 * @param array $where
	 * @param array $operators
	*/
	abstract function update(array $where = null, array $operators = null, $upset = false);
	
	
	/**
	 * Выполняем запрос на добавление новой записи
	 *
	 * @param array $set
	 */
	abstract function insert(array $set = null);
	
	
	/**
	 * Возвращаем кол-во записей по условию
	 *
	 * @param array $where
	 * @returnint
	*/
	abstract function count(array $where = null);
	
	
	/**
	 * Удаляет записи по условию
	 * @param array $where
	 */
	abstract function remove(array $where = null);
	
	
	abstract function ensureIndex(array $fields, $name = null, $params = array());
}